From 684624005a3c1d62521f7837f71ffb3b7aae1b94 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timm=20B=C3=A4der?= Date: Sat, 27 Jan 2018 11:02:07 +0100 Subject: [PATCH] gl renderer: Fix hidpi cairo node rendering We can't just unconditionally create a larger texture here, since the incoming cairo surface might have a device scale that doesn't fit our scale_factor. Instead, look up the surface device scale and use that. --- gsk/gl/gskglrenderer.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c index dc97ebf4e0..00dc36416d 100644 --- a/gsk/gl/gskglrenderer.c +++ b/gsk/gl/gskglrenderer.c @@ -638,15 +638,18 @@ render_cairo_node (GskGLRenderer *self, const cairo_surface_t *surface = gsk_cairo_node_peek_surface (node); int gl_min_filter = GL_NEAREST, gl_mag_filter = GL_NEAREST; int texture_id; + double scale_x, scale_y; if (surface == NULL) return; get_gl_scaling_filters (node, &gl_min_filter, &gl_mag_filter); + + cairo_surface_get_device_scale ((cairo_surface_t *)surface, &scale_x, &scale_y); texture_id = gsk_gl_driver_create_texture (self->gl_driver, - node->bounds.size.width * self->scale_factor, - node->bounds.size.height * self->scale_factor); + node->bounds.size.width * scale_x, + node->bounds.size.height * scale_y); gsk_gl_driver_bind_source_texture (self->gl_driver, texture_id); gsk_gl_driver_init_texture_with_surface (self->gl_driver, texture_id, -- 2.30.2